hadoop 集群 分布式拷贝 distcp

image.png

数据迁移 往往 是数据运维经常会用到的事情,就像 pc重装电脑,把C盘的文件转移到E盘一样,不过 数据迁移 在生产环境当中往往是 跨网络 跨集群 传输 文件,要保证文件不丢失 不乱码 不重复 ,文件的完整统一。
【顺便需要解决 一下 pid 的存储路径,不然集群长时间 久了 突然停止,会停止不下来,报 找不到 NameNode 和DataNode】
http://blog.csdn.net/gyqjn/article/details/50805472

hadoop 集群数据 的特点是 量大 分块 有副本 , 集群的稳定性 和配置高可用 机器 硬件性能 和网络带宽 stream 流读取等等都是考验。

hadoop 如果使用 get 把文件加载到本地,再通过scp 去传,不光步骤繁琐 ,小文件量大,在加上编写脚本容易出错 不易调试 ,集群不在同一内网,传输 速率和稳定性都无法保证。hadoop自然有一个自己的工具 :Distcp .。假如 没有Distcp 想想 管理大数据 简直会是一个噩梦。
Distcp 的强大在于 简洁 可配置 传输稳定 原生支持 错误可以排查 等等,可以说是数据算法 及数据运维的福音。
当然 Distcp 很强大 ,也很傲娇,稍微不留意就会出现 小脾气和公主病,在倒腾 Distcp 的两周内,我也算吃了不少苦头,各种报错,简直不能忍,差一点就要放弃了,还是送我一片光阴 。尝到小甜头后,又继续报错 被虐的体无完肤,在最后的坚持下,提着头 抱着再解决不了干脆就离职跑路吧。但还是 强给自己信心。告诉自己没有踏不过坎都是纸老虎。

image.png

最终 克服重重困难 找到了 最终答案,回头一看,又气又恼,按道理是简单,可是找到宝藏 藏宝图不止一张,也只有不断的尝试后,才确认了最后的结果的正确性。

好了,言归正传,Distcp 支持 三种 协议 hdfs hftp webhdfs ,支持集群内部 拷贝,集群间拷贝 ,跨版本集群间拷贝。源和目标可以是目录 或者是文件 ,支持 overwrite 和update,Distcp 的执行 其实是mapreduce。
在使用 Distcp ,集群内部 src 源文件路径和dist 目标路径 都可以使用 hdfs 协议,例如
hadoop Distcp hdfs://master:9000/linkge/1020log.txt hdfs://master:9000/linkactive/1020log.txt

在集群间 数据迁移 ,单个 文件 ,需要在目标集群上操作,src源需要使用hftp 协议 默认端口 50070 ,dist 目标使用hdfs 协议 默认端口 9000 或者8020,
例如
hadoop distcp hftp://52.83.67.242:50070/linkpage/201707/01/01/biz.log.22.snappy hdfs://linkhadoop-master:9000/linkpage/201707/01/01/biz.log.22.snappy

单个目录也可以使用 此方式
hadoop distcp hftp://52.80.67.242:50070/linkpage/201707/01 hdfs://linkhadoop-master:9000/linkpage/201707/01

不过 对于拥有多个大文件的单个目录来说,使用hftp 协议传输 会报一些错误 ,好像是hadoop 2.x 自带的老bug
这些错误包括socket read time out 和 文件 读写和文件大小不统一
`
Caused by: org.apache.hadoop.tools.mapred.RetriableFileCopyCommand$CopyReadException: java.net.SocketTimeoutException: Read timed out

Caused by: java.net.SocketTimeoutException: Read timed out

Caused by: org.apache.hadoop.tools.mapred.RetriableFileCopyCommand$CopyReadException: java.io.IOException: Got EOF but currentPos = 1900544 < filelength = 3461794346
at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.readBytes(RetriableFileCopyCommand.java:290)
at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.copyBytes(RetriableFileCopyCommand.java:258)
at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.copyToFile(RetriableFileCopyCommand.java:183)
at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.doCopy(RetriableFileCopyCommand.java:123)
at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.doExecute(RetriableFileCopyCommand.java:99)
at org.apache.hadoop.tools.util.RetriableCommand.execute(RetriableCommand.java:87)
`

这些错其实并不能说明是src 集群 文件是有问题的,所以 经过多次 尝试 仍然无法解决,多个文件传输 仍有 70%的文件传输失败。
这个问题 最终在 Google一个非常难查到的网页找到了微弱的声音,当看到页面 有一个 solved ,真是百感交集。
https://community.cloudera.com/t5/Storage-Random-Access-HDFS/Handling-Distcp-of-large-files-between-2-clusters/td-p/42470
有人 跟帖告诉大家使用 webhdfs 协议可以几乎完美的解决这个问题,数据总算是可以愉快的传输了。

例如
hadoop distcp webhdfs://52.82.67.242:50070/linkpage/201708 hdfs://linkhadoop-master:9000/linkpage/201708

刚才说的 这些 是在使用的Distcp 终极答案。其中在使用Distcp 中途还遇到了 其他的拦路鬼,
比如报 在 src 集群 的DataNode无法找到相应的文件,
这个 一般来说src 集群本身的问题, 比如说 集群 中各个节点有没有设置 主机名,每个DataNode 节点 是否 在/etc/hosts 配置了 所有src DataNode NameNode的 节点 的私有ip 与主机名及dist 目标集群 的DataNode NameNode 节点的公有ip 和主机名,而且 dist 目标集群也要 做类似配置。要配置 ssh免登陆,NameNode ssh免登陆到DataNode上,配置一下 hadoop 各个节点 守护进程 的pid 目录,配置 hadoop 用户 下的 ~/.bashrc 文件中的环境变量,重启集群试试

还有其他的 socket 连接 时间超时,怀疑可能是 网络带宽,还有读大文件的异常,很有可能是 内存小 硬盘性能问题等等。如果可以做配置更改也是很不错的。

另外 我们要有能力定位问题 ,查找问题 ,搜索答案 ,解决问题。验证问题 验证解决方案。

比如我们在使用 Distcp 传输的时候时,先小数据集 验证,
比如定位到一个文件 ,多次传输 ,观察 传输的稳定性,和传输后的文件大小和行数,
再 单目录 传输,观察 目录文件的数量是否一致,文件的大小是否一致,量多的话,选择抽查 部分文件 查看行数是否一致。也可以通过 head tail命令查看 前后十行文件内容是否一致
源集群 抽查 部分文件行数


image.png

目标集群抽查相同的部分文件行数

image.png

通过抽查验证,发现 完全一致,所以可以应用到真实的生产环境实施了。
我们通过尝试 从亚马逊 AWS EC2的hadoop 集群到 阿里云的 linux 集群,传输 一天日志 压缩后80G,使用Distcp 耗时 20分钟,
然后我们生产环境中单月传输,估算大概需要7小时到-10小时,,所以需要转后台进程 执行 add &&&&
hadoop distcp webhdfs://52.82.67.242:50070/linkpage/201708 hdfs://linkhadoop-master:9000/linkpage/201708 &
本来还想为阿里云的DataNode 节点增加宽带 带宽,想加快速度,但是在阿里云的控制台 监控 竟然公网的使用时400kb,太诡异,真不晓得这数据是如何如此快速传输过来的。
20分钟 传一天 80Gb,按道理来说还是可以的,索性就放弃了增加宽带。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,458评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,454评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,171评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,062评论 0 207
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,440评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,661评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,906评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,609评论 0 200
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,379评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,600评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,085评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,409评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,072评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,088评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,860评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,704评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,608评论 2 270

推荐阅读更多精彩内容